package com.cari.oa.service;

import com.cari.oa.dao.BaseDao;
import com.cari.oa.dao.SysRoleDao;
import com.cari.oa.domain.SysRoleEntity;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 系统角色service
 * User: yexuhui
 * Date: 12-12-13
 * Time: 下午4:14
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class SysRoleService extends BaseService<SysRoleEntity> {

    @Resource
    protected SysRoleDao dao;

    /**
     * 根据系统角色英文名获取系统角色实体
     * @param enname 系统角色英文名
     * @return 系统角色实体
     */
    @Transactional(readOnly = true)
    public SysRoleEntity getByEnname(String enname) {
        return dao.getByEnname(enname);
    }
    
    /**
     * 判断该角色是否被用户使用
     * @param enname 角色英文名
     * @return 是否被使用
     */
    public boolean isRoleUsedByUser(String enname) {
    	return dao.isRoleUsedByUser(enname);
    }
    
    /**
     * 判断该英文名实体是否存在
     * @param enname 系统角色英文名
     * @return 是否存在
     */
    @Transactional(readOnly = true)
    public boolean existByEnname(String enname) {
    	return dao.existByEnname(enname);
    }

    /**
     * 根据系统角色英文名删除系统角色实体
     * @param enname 系统角色英文名
     */
    public void deleteByEnname(String enname) {
        SysRoleEntity role = dao.getByEnname(enname);
        if(role == null) throw new RuntimeException("角色不存在: " + enname);
        dao.delete(role);
    }
    
    /**
     * 分页查询系统角色列表
     * @param enname 系统角色英文名
     * @param alias 系统角色中文名
     * @param page 当前页
     * @param size 每页条数
     * @return 分页列表
     */
    @Transactional(readOnly = true)
    public List<SysRoleEntity> getPage(String enname, String alias, int page, int size) {
    	return dao.getPage(enname, alias, page, size);
    }
    
    /**
     * 系统角色查询记录条数
     * @param enname 系统角色英文名
     * @param alias 系统角色中文名
     * @return 查询记录条数
     */
    @Transactional(readOnly = true)
    public long getCount(String enname, String alias) {
    	return dao.getCount(enname, alias);
    }

    /**
     * 根据系统用户英文名获取系统角色实体列表
     * @param userEnname 系统用户英文名
     * @return 系统角色实体列表
     */
    @Transactional(readOnly = true)
    public List<SysRoleEntity> getRolesByUserName(String userEnname) {
        return dao.getRolesByUserName(userEnname);
    }

    /**
     * 重置系统用户关联的角色
     * @param userEnname 系统用户英文名
     * @param roleNames 系统角色英文名列表
     */
    public void resetRolesByUserName(String userEnname, List<String> roleNames) {
        dao.resetRoles(userEnname, roleNames);
    }

    @Override
    public BaseDao<SysRoleEntity> getDao() {
        return dao;
    }
}
